/*
 * @lc app=leetcode.cn id=90 lang=java
 *
 * [90] 子集 II
 */

// @lc code=start

import java.util.*;

class Solution {
    //有重复的元素，那么按照78的方法就会有重复的子集
    // 1. 用set去重
    public List<List<Integer>> subsetsWithDup(int[] nums) {
        List<List<Integer>> ans = new ArrayList<>();
        ans.add(new ArrayList<Integer>());//一定会有个空的
        for(int i = 0 ; i<nums.length ;i++){
            int all = ans.size();
            for(int j = 0 ; j< all ;j++){//所有现有的复制出来，后面加一个当前元素。
                List<Integer> temp = new ArrayList<>(ans.get(j));
                temp.add(nums[i]);
                ans.add(temp);
            }
        }
        Set<List<Integer>> temp = new HashSet<>();
        temp.addAll(ans);
        ans = new ArrayList<>();
        ans.addAll(temp);

        return ans;
    }
}
// @lc code=end

